
///////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2008, Arizona State University
//  All rights reserved.
//  BSD License: http://www.opensource.org/licenses/bsd-license.html
//  Author: Adam Kubach
//
///////////////////////////////////////////////////////////////////////////////

#include "Minerva/Core/Visitors/FindObject.h"

using namespace Minerva::Core::Visitors;


///////////////////////////////////////////////////////////////////////////////
//
//  Constructor.
//
///////////////////////////////////////////////////////////////////////////////

FindObject::FindObject ( const ObjectID& objectID ) : BaseClass(),
  _objectID ( objectID ),
  _feature ( 0x0 )
{
}


///////////////////////////////////////////////////////////////////////////////
//
//  Destructor.
//
///////////////////////////////////////////////////////////////////////////////

FindObject::~FindObject()
{
}


///////////////////////////////////////////////////////////////////////////////
//
//  Visit a container.
//
///////////////////////////////////////////////////////////////////////////////

void FindObject::visit ( Minerva::Core::Data::Container &container )
{
  // If we have a feature, stop the search, it should be unique.
  if ( _feature )
  {
    return;
  }

  _feature = container.find ( _objectID );
  
  // If we didn't find it, keep traversing.
  if ( false == _feature.valid() )
    container.traverse ( *this );
}


///////////////////////////////////////////////////////////////////////////////
//
//  Get the unknown (may be null).
//
///////////////////////////////////////////////////////////////////////////////

Minerva::Core::Data::Feature::RefPtr FindObject::object() const
{
  return _feature;
}
